A memory capable of storing a large amount of data frequently has drawbacks such as slower input/output speeds as compared to smaller capacity memories. Conversely, smaller memories which may be faster to operate, may have a greater cost to store data on a per bit basis, as compared to larger capacity memories. Accordingly, computer systems frequently employ a two-level memory system, often referred to as a “heterogeneous” memory system employing a smaller, faster memory as a cache memory for a second, larger and frequently slower memory.
The smaller cache memory is often positioned closer to the central processing unit and thus may have a relatively short data path to the central processing unit to facilitate faster read and write operations between the central processing unit and the cache. Hence, the cache memory is often referred to as the “near” memory. Conversely, the larger, second memory is often positioned more distant from the central processing unit. As a result, the larger, second memory typically has a longer data path to the central processing unit and is frequently referred to as the “far” memory.
Because read and write operations may often be performed more quickly for data stored in the near memory, selected data initially stored in the far memory may be read from the far memory and temporarily cached in the near memory if it is anticipated that the data will be frequently accessed by a processor. However, because the near memory functioning as a cache memory may be more limited in capacity as compared to the far memory, data deemed less likely to be needed for processor operations may be evicted from the near memory in accordance with an eviction policy. If data is modified in the near memory, the modified data is frequently referred to as “dirty” data. If dirty data is to be evicted from the near memory, the dirty data is typically transferred back to the far memory in a write back operation for storage. Unmodified data frequently referred to as “clean” data may be discarded when evicted since a copy of the data already exists in the far memory.
Due to technology differences between read and write operations, write operations transferring write data to the far memory may be transferred in relatively large units of data such as a sector of data which may include multiple subunits of data such as blocks of data to reduce the overhead often associated with such write operations. Conversely, read data being transferred in a read operation from a near memory may be transferred in relatively small subunits of data such as a block of data, for example, to reduce latency of such read operations.